define('verify', function(require, exports, module) {
	var localVerifycode,
		VerityTel,
		VerityErrorCount = 0,
		smsTime,
		curCount,
		localError,
		InterValObj,
		SetRemainTime,
		btn,
		callback = function(rs) {
			if(rs.retcode && rs.retcode != '0') {
				btn.removeAttr("disabled").val("发送短信失败，请重试！");
				return;
			}
			curCount = 60;
			btn.val(curCount + "秒后重新获取");
			InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器，1秒执行一次
		},
		SetRemainTime = function() {
			if(curCount == 0) {
				window.clearInterval(InterValObj); //停止计时器
				btn.removeAttr("disabled").val("重新发送验证码"); //启用按钮
			} else {
				curCount--;
				btn.val(curCount + "秒后重新获取");
			}
		},
		d;
	d = {
		send: function(mobile, code, $btn) {
			var time = new Date(),
				code,
				str;
			//			if(!smsTime||!localVerifycode||time-smsTime>300000){
			//	    	   code=createVerifycode(6);
			//	    	   smsTime=time;
			//	    	   localVerifycode=code;
			//	    	}else{
			//	    	   code=localVerifycode;
			//	    	}
			//	    	str='您的验证码：'+code;
			VerityTel = mobile;
			btn = $btn;
			btn.val("发送中……").attr("disabled", "true");
			require('api').sendSMS({
				mobile: mobile,
				code: code,
				content: str,
				error:function(){
					btn.removeAttr("disabled").val("重新发送验证码"); //启用按钮
				},
				callback: callback
			});
		},
		valid: function(mobile, verifycode) {
			var error = false;
			if(localVerifycode !== verifycode) {
				if(VerityErrorCount < 10) {
					error = "请输入正确的验证码！";
				} else {
					error = "验证码输入错误10次,请再次获取验证码！";
					localVerifycode = null;
				}
				VerityErrorCount++;
			} else if(VerityTel != mobile) {
				error = "更换手机号码后请再次获取的验证码！";
			}
			if(error) {
				localError = error;
				return false;
			} else {
				localError = false;
				VerityErrorCount = 0;
				return true;
			}
		},
		getError: function() {
			return localError;
		},
		refresh: function() {
			smsTime = null;
		}
	}
	return d;
});
define(['verify'], function(Verify) {
	var urls = {
			'goods': 0,
			'orders': 1,
			'ordersn': 2,
			'hq': 3,
			'wxid': 4,
			'login': 5,
			'appid': 6,
			'qrcode': 7,
			'user': 8, //报没有功能号错误
			'notice': 9, //公告
			'isReg': 10, //wxid不以放url里。
			'subscribe': 11,
			'noticeback': 12, //公告回执
			'coupons': 13, //,
			'customer': 14,
			'commission': 15,
			historyOrder: 16,
			'fundflowHistory': 17,
			'changePwd': 18,
			register: 19,
			bind: 20,
			unbind: 21,
			cash: 43,
			charge: 22,
			'createOrder': 23,
			'modifyOrder': 24,
			'captcha': 25,
			'sms': 26,
			"pwdCheck": 27,
			'resetPwd': 28,
			'articleList': 29,
			'closeOrders': 30,
			'fundFlow': 31, //32
			'privinces': 33,
			'citys': 33,
			'banks': 34,
			'articleDetail': 35,
			'noticeDetail': 36,
			'noticeList': 37,
			'couponsAll': 38,
			'closeOrder': 39,
			'closeOrderAll': 39,
			'charts': 40,
			'allowFund': 41,
			'userchannels': 42,
			'channels':44,
			'wxinfo':45,
		    'userPoints':46,
		    'points':47,
			'mobileToWxid':48
		},
		errors = {
			'-1': '未知错误',
			'-2': '获得配置文件出错',
			'-3': '数据库初始化失败',
			'-4': '数据库连接超时',
			'-5': '消息未注册',
			'-6': '未找到配置文件',
			'-7': '数据库开启事务失败',
			'-8': '数据库提交事务失败',
			'-9': '系统类型不一致',
			'-1000': '与交易服务链接失败或超时，请刷新再试',
			'-1001': '连接初始化不成功',
			'-1002': '连接开始不成功',
			'-1003': '连接销毁不成功',
			'-2000': '客户端初始化出错',
			'-2001': '服务端初始化出错',
			'-2002': '用户未登录',
			'-2004': '不支持的功能号',
			'-2005': '发送数据错误',
			'-2006': '登录服务没有启动',
			'-3000': '消息解析错误',
			'-3001': '数据库执行超时',
			'-3002': '数据库执行结果集为空',
			'-3003': '数据库缺少字段',
			'-3004': '帐号或密码错误',//'未找到客户信息',
			'-3005': '数据库访问超时',
			'-3006': '单据无效',
			'-3007': '交易权限受限',
			'-3008': '操作类型不存在',
			'-3010': '未找到商品信息',
			'-3011': '未找到规则组信息',
			'-3012': '止损或获利无效',
			'-3013': '订单数量不符合合约规范',
			'-3014': '市价已变',
			'-3015': '超过用户设定范围',
			'-3016': '生成单据流水号超时',
			'-3017': '超过最大持仓数量限制',
			'-3018': '用户可用资金不足够',
			'-3019': '单据已存在',
			'-3020': '单据不存在',
			'-3021': '市场休市',
			'-3022': '商品休市',
			'-3023': '未找到支付通道',
			'-3024': '非签约、解约时间段，禁止签约、解约',
			'-3025': '非入金时间段，禁止入金',
			'-3026': '非出金时间段，禁止出金',
			'-3027': '支付通道不支持交易端发起此接口',
			'-3028': '支付通道不支持签约、解约',
			'-3029': '账户已签约，禁止重复签约',
			'-3030': '账户已解约，禁止重复解约',
			'-3031': '银行账户不正确',
			'-3032': '证件号码不正确',
			'-3033': '资金密码不正确',
			'-3034': '账户不符合签约解约条件，请检查账户资金，单据信息',
			'-3035': '字段类型转化出错',
			'-3036': 'TableLog更新失败',
			'-3037': '出入金金额溢出',
			'-3038': '账户未签约，禁止出入金',
			'-3039': '出入金金额超过每日出金限制或小于每笔出金限制',
			'-3041': '出入金状态不符合规范',
			'-3042': '出入金单据已被审核',
			'-3043': '未返回相应的银行流水号',
			'-3044': '限价无效',
			'-3045': '效力类型不存在',
			'-3046': '未找到相应交易端流水号出入金单据信息',
			'-3047': '未找到相应银行流水号出入金单据信息',
			'-3048': '银行或出入金服务流水号重复',
			'-3049': '无效的交易日',
			'-3050': '改单价格小于冻结点差',
			'-3051': '支付通道不支持银行端发起此接口',
			'-3052': '支付通道不支持出入金类型',
			'-3053': '支付通道商务号不存在',
			'-3054': '席位号不存在',
			'-3055': '禁止交易',
			'-3056': '禁止买入',
			'-3057': '禁止卖出',
			'-3058': '禁止开仓',
			'-3059': '重置密码失败',
			'-3060': '未找到交易员信息',
			'-3061': '交易员登录密码错误',
			'-3062': '管理员密码错误',
			'-3063': '未找到管理员信息',
			'-3064': '不支持基金',
			'-3065': '没有找到基金账户',
			'-3066': '转账对方没有支付通道',
			'-4036': '结算输入参数无效',
			'-4037': '市场开市状态，请先收市再做结算',
			'-4038': '价格超过涨跌幅限制',
			'-4039': '未找到用户商品信息',
			'-4040': '登录密码错误',
			'-4041': '没有找到公告',
			'-4042': '账户类型不正确',
			'-4043': '单边账不存在或已处理',
			'-4044': '权限不够',
			'-4046': '对手信息转化出错',
			'-4047': '没找到相应的特别会员信息',
			'-4048': '计算错误',
			'-4049': '未找到用户持仓',
			'-4050': '没有足够的对手持仓下单',
			'-4051': '用户未激活，禁止此项操作',
			'-4052': '用户已注销',
			'-4053': '公告类型不正确',
			'-4054': '受限状态下不能超过受限净头寸',
			'-4055': '自动结算模式不能执行手工结算',
			'-4056': '市场开市状态，禁止加载',
			'-4057': '会员状态受限或冻结，禁止下单',
			'-4058': '系统仅支持买交割',
			'-4059': '账户已经绑定了微信号',
			'-4060': '账户没有需要数量的代金券 ',
			'-4061': '账户代金券数量不足够开仓 ',
			'-4062': '商品头寸已经存在',
			'-4063': '不支持此终端类型登录',
			'-4064': '手机号已经注册',
			'-4065': '节假日禁止签约，解约，出入金',
			'-4066': '未找到居间商',
			'-4067': '证件号码已经注册',
			'-4068': '用户已经注册',
			'-4069': '手机号码不能为空',
			'-4070': '证件号码不能为空',
			'-4071': '用户账号不能为空',
			'-4072': '用户名称不能为空',
			'-4073': '登录密码不能为空',
			'-4074': '不支持PC端注册',
			'-4075': '结算失败',
			'-4076': '该客户类型不允许转经济人',
			'-4077': '客户转经济人已申请',
			'-4078': '客户转经济人申请失败',
			'-4079': '未找到经济人',
			'-4082': '有资金不能解绑',
			'-4040': '帐号或密码错误',
			'-4080':'非默认主支付通道，不提供此业务支持',
			'-4091': '会员可下单手数出错',
			'-4092': '找不到所属会员用户记录',
			'-4093': '手机号码解密失败',
			'-4094': '红包信息有误，请重新核对后发送',
			'-4095': '相同红包序列号',
			'-4096': '未找到发送红包信息',
			'-4097': '红包已被抢完',
			'-4098': '超过当日最大可发金额',
			'-4099': '红包已领取',
			'-4101': '红包已过期',
			'-4102': '该卡已绑定,不能解除绑定',
			'12': '请输入帐号',
			'13': '请输入密码',
			1: 'cookie中无sessionid',
			2: 'redis中无session记录',
			3: 'url中无func_id',
			4: '错误的MSG_TYPE',
			5: '转发失败',
			6: 'protobuf解析失败',
			7: 'redis 链接错误',
			8: 'redis session延期失败',
			9: 'redis 执行命令失败',
			10: 'url中无用户code',
			11: 'url中无wxdomain名',
			14: ' 把session放到redis中失败',
			15: '没有可用的redis server',
			16: 'curl初始化失败',
			17: 'curl执行http请求失败',
			18: 'curl返回失败',
			19: 'redis中无wxdomain',
			20: 'redis中wxdomain解析错误',
			21: '微信用户不存在',
			22: 'url中无用户微信ID',
			23: 'redis中取会员token失败',
			24: 'redis中取的token无应有字段',
			25: 'redis中取的token无效',
			26: 'cookie中无用户wxid',
			27: '用户请求传入的code无效',
			28: 'url中缺少必要参数',
			29: '暂不支持的功能',
			30: '未知错误',
			31: '图片验证码验证失败',
			32:'从redis提取图片验证码错误',
			33:'发送短信失败',
			34:'短信验证码验证失败',
			35:'从redis提取短信验证码错误',
			36:'json串解析失败',
			37:'商品种类未知',
			38:" 非法的数据",
			39:'时间格式错误',
			40:'短信验证码失效！',
			41:'没有关注公众号',
			42:'非法请求',//'http请求 head中没X-Requested-With',
            43:'验证码失效了',//redis无数据
            44:'验证码失效了'//redis中无临时session

		},
		preCt=$('#preMsg');
	return {
		Verify: Verify,
		cfg: {
			refreshTime: 1000,
			noPercent: false
		},
		lowHigh: function(s) {
			return s == 98 ? '涨' : '跌';
		},
		queryToObj: function(str) {
			var obj = {},
				list = str.split('&'),
				kv;
			for(var i = 0; i < list.length; i++) {
				kv = list[i].split('=');
				obj[kv[0]] = $.trim(kv[1]);
			}
			return obj
		},
		isWxBrowser: function() {
			return /micromessenger/i.test(window.navigator.userAgent);
		},
		goBack: function() {
			var len = window.history.length;
			if(len) {
				history.go(-1);
			} else {
				window.location.hash = "#/";
			}
		},
		priceFormat: function(mindecimal, v) {
			return mindecimal ? (v / Math.pow(10, mindecimal)).toFixed(mindecimal) : parseInt(v);
		},
		setTitle: function(t) {
			window.document.title = t;
		},

		url: function(fn) {
			var c = urls[fn];
			return ['http://120.24.241.134:8081/cgi-bin/zl_cgi?c=', c, '&f=', fn].join('');
		},
		loadMsg:function(html){
			preCt.html(html);
		},
		msg: function(s) {
			$("#message").show().html(s);
			setTimeout('$("#message").fadeOut()', 1500);
		},
		dealErrorCode: function(code) {
			
			var error = errors[code];
			
			if(error) {
				this.msg(error);
			} else {
				this.msg('错误代码:' + code);
			}
		},
		getError: function(code) {
			var error = errors[code];
			return error ? error : code;
		},
		setCookie: function(c_name, value, expiredays) {
			var exdate = new Date()
			exdate.setDate(exdate.getDate() + expiredays)
			document.cookie = c_name + "=" + escape(value) +
				((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
		},
		//取回cookie
		getCookie: function(c_name) {
			var c_start, c_end;
			if(document.cookie.length > 0) {
				c_start = document.cookie.indexOf(c_name + "=")
				if(c_start != -1) {
					c_start = c_start + c_name.length + 1
					c_end = document.cookie.indexOf(";", c_start)
					if(c_end == -1) c_end = document.cookie.length
					return unescape(document.cookie.substring(c_start, c_end))
				}
			}
			return ""
		},
		subString: function(str, len, hasDot) {
			var newLength = 0;
			var newStr = "";
			var chineseRegex = /[^\x00-\xff]/g;
			var singleChar = "";
			var strLength = str.replace(chineseRegex, "**").length;
			for(var i = 0; i < strLength; i++) {
				singleChar = str.charAt(i).toString();
				if(singleChar.match(chineseRegex) != null) {
					newLength += 2;
				} else {
					newLength++;
				}
				if(newLength > len) {
					break;
				}
				newStr += singleChar;
			}

			if(hasDot && strLength > len) {
				newStr += "...";
			}
			return newStr;
		},
		isIdCardNo: function(num) {
			var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
			var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
			var varArray = new Array();
			var intValue;
			var lngProduct = 0;
			var intCheckDigit;
			var intStrLen = num.length;
			var idNumber = num;
			// initialize
			if((intStrLen != 15) && (intStrLen != 18)) {
				return false;
			}
			// check and set value
			for(var i = 0; i < intStrLen; i++) {
				varArray[i] = idNumber.charAt(i);
				if((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
					return false;
				} else if(i < 17) {
					varArray[i] = varArray[i] * factorArr[i];
				}
			}

			if(intStrLen == 18) {
				//check date
				var date8 = idNumber.substring(6, 14);
				if(this.isDate8(date8) == false) {
					return false;
				}
				// calculate the sum of the products
				for(i = 0; i < 17; i++) {
					lngProduct = lngProduct + varArray[i];
				}
				// calculate the check digit
				intCheckDigit = parityBit[lngProduct % 11];
				// check last digit
				if(varArray[17] != intCheckDigit) {
					return false;
				}
			} else { //length is 15
				//check date
				var date6 = idNumber.substring(6, 12);
				if(this.isDate6(date6) == false) {
					return false;
				}
			}
			return true;
		},
		isDate6: function(sDate) {
			if(!/^[0-9]{6}$/.test(sDate)) {
				return false;
			}
			var year, month, day;
			year = sDate.substring(0, 4);
			month = sDate.substring(4, 6);
			if(year < 1700 || year > 2500)
				return false
			if(month < 1 || month > 12)
				return false
			return true
		},

		isDate8: function(sDate) {
			if(!/^[0-9]{8}$/.test(sDate)) {
				return false;
			}
			var year, month, day;
			year = sDate.substring(0, 4);
			month = sDate.substring(4, 6);
			day = sDate.substring(6, 8);
			var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
			if(year < 1700 || year > 2500)
				return false
			if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
				iaMonthDays[1] = 29;
			if(month < 1 || month > 12)
				return false
			if(day < 1 || day > iaMonthDays[month - 1])
				return false
			return true
		}
	}
})